import serial
import matplotlib.pyplot as plt

# 设置串口参数
port = 'COM10'  # 串口号
baudrate = 115200  # 波特率

# 打开串口
ser = serial.Serial(port, baudrate)

# 创建一个空的列表来保存接收到的数据
data = []

plt.ion()
# 创建一个图形窗口
fig = plt.figure()

# 创建一个空的波形图线条
graph, = plt.plot([], [])

# 设置波形图的坐标轴范围
plt.xlim(0, 100)  # x轴范围
plt.ylim(0, 1023)  # y轴范围

# 设置波形图的标签
plt.xlabel('Time')
plt.ylabel('Data')

# 更新波形图的回调函数
def update_line(new_data):
    global data
    data.append(new_data)
    graph.set_data(range(len(data)), data)
    # plt.draw()
    #fig.canvas.draw()
    plt.pause(0.5)
    if (len(data) >= 101):
        data = data[50:]

# 循环读取串口数据并更新波形图
try:
    while True:
        # 从串口读取一行数据（以换行符为结束符）
        line = ser.readline().decode('utf-8').rstrip()
        
        # 将数据转换为整数
        try:
            data_point = int(line)
        except ValueError:
            continue
        
        # 调用更新波形图的回调函数
        update_line(data_point)

# 捕捉键盘中断（Ctrl+C）
except KeyboardInterrupt:
    pass

# 关闭串口
ser.close()
plt.ioff()
# # 显示波形图
# plt.show()
